package com.xb.loan.cashier.biz.service;

import com.xb.loan.cashier.biz.dao.bean.CashierChargeOrder;

import java.util.List;

public interface CashierChargeOrderService {

    /**
     * 新增一条记录,判断字段是否为空
     * @param cco
     * @return
     */
    public int addOrder(CashierChargeOrder cco);
    
    /**
     * 查询新增记录是否为重复数据
     * @param orderId
     * @param userId
     * @param partnerId
     * @param platId
     * @return
     */
    public int getCountByField(String orderId, String userId, String partnerId, String platId);

    /**
     * 查询充值记录状态
     * @param orderId
     * @param partnerId
     * @param platId
     * @return
     */
    public int queryStatus(String orderId, String partnerId, String platId);
    /**
     * 查询充值记录发送状态
     * @param orderId
     * @param partnerId
     * @param platId
     * @return
     */
    public int queryPushStatus(String orderId, String partnerId, String platId);

    /**
     * 更新充值订单状态
     * @param platId
     * @param partnerId
     * @param orderId
     * @param tradeTime
     * @param status
     * @param channelOrderId
     * @param errorCode
     * @param errorMsg
     * @return
     */
    public int updateByOrderId(String platId, String partnerId, String orderId, String tradeTime, int status, String channelOrderId, String errorCode, String errorMsg);

    /**
     * 更新通知推送状态
     * @param platId
     * @param partnerId
     * @param orderId
     * @param sendStatus
     * @return
     */
    public int updatePushStatusByOrderId(String platId, String partnerId, String orderId, int sendStatus);

    /**
     * 查询N分钟前待处理数据
     * @param minute
     * @return
     */
    List<CashierChargeOrder> queryByStatus(int minute, int limit, int start);
    /**
     * 查询N分钟前已处理未回推数据
     * @param minute
     * @return
     */
    List<CashierChargeOrder> queryByPushStatus(int minute, int limit, int start);
    /**
     * 加密
     * @param cashierChargeOrder
     * @return
     */
    public String encrypt(CashierChargeOrder cashierChargeOrder);
    /**
     * 转换状态码
     * @return
     */
    public String convertStatus(int status);
    /**
     *充值验签
     * @param money
     * @param platId
     * @param userId
     * @param orderId
     * @param partnerId
     * @param sign
     * @return
     */
    public boolean validate(double money, String platId, String userId, String orderId, String partnerId, String sign);

    /**
     *根据平账期查询当前账期内是否有未对账的记录
     * @param accountPeriod
     * @return
     */
    public int queryCountByAccountDayPlat(String accountPeriod);
    /**
    *查询当前账期内与第三方对账成功的数据
    * @param accountPeriod
    * @param start
    * @param limit
    * @return
    */
    List<CashierChargeOrder> queryAccountByPage(String accountPeriod, int start, int limit);

    /**
     *查询当前账期内与第三方对账成功的数据总条数
     * @param accountPeriod
     * @return
     */
    int queryAccountCount(String accountPeriod);

    /**
     * 查询第三方少的数据
     * @param day
     * @param accountId
     * @param i
     * @param pageSize
     * @return
     */
    public List<CashierChargeOrder> selectThirdLessData(String day, String accountId, int i, int pageSize);

    /**
     * 账期内未返回的成功数据（包含跨期的数据、收银台成功第三方失败的数据）
     * @param day
     * @param accountId
     * @param pageNo
     * @param pageSize
     * @return
     */
    public List<CashierChargeOrder> selectAccountNonDatas(String day, String accountId, int pageNo, int pageSize);

    /**
     * 根据订单id查询
     * @param orderIds
     * @return
     */
    public List<CashierChargeOrder> selectByOrderIds(List<String> orderIds);

    /**
     * 更新对账时间
     * @param orderIds
     * @param day
     */
    public int updateThirdAccountTime(List<String> orderIds, String day);

    /**
     *根据orderId查询一条记录
     * @param orderId
     * @return
     */
    public CashierChargeOrder queryByOrderId(String orderId);

    /**
     * 充值回推失败回推次数+1
     * @param orderId
     * @param pushStatus
     * @param pushCount
     * @return
     */
    int updatePushCount(String orderId, int pushStatus, int pushCount);

    /**
     * 更新对账状态
     * @param accountId
     * @param orderId
     * @param accountStatus
     * @param day
     * @return
     */
    public int updateAccountStatus(String accountId, String orderId, int accountStatus, String day);
    
    public int queryPushCount(String orderId);
}
